sonichackinfofandomcom_ru-20200214-history
Хакинг игры Sonic the hedgehog
Гайды по хакингу к игре Sonic the hedgehog ГАЙД. РЕДАКТИРОВАНИЕ ПРИЗОВ В МОНИТОРАХ МОНИТОР С КОЛЬЦАМИ (ИЗМЕНЕНИЕ КОЛ-ВА КОЛЕЦ) Найдите Obj2E Потом перейдите к Obj2E_ChkRings Obj2E_ChkRings: cmpi.b #6,d0 ; does monitor contain 10 rings? bne.s Obj2E_ChkS ; if not, branch addi.w #$A,($FFFFFE20).w ; add 10 rings to the number of rings you have ori.b #1,($FFFFFE1D).w ; update the ring counter cmpi.w #100,($FFFFFE20).w ; check if you have 100 rings bcs.s Obj2E_RingSound bset #1,($FFFFFE1B).w beq.w ExtraLife cmpi.w #200,($FFFFFE20).w ; check if you have 200 rings bcs.s Obj2E_RingSound bset #2,($FFFFFE1B).w beq.w ExtraLife В СТРОКЕ addi.w #$A,($FFFFFE20).w ; add 10 rings to the number of rings you have НУЖНО ИЗМЕНИТЬ ЗНАЧЕНИЕ #$A, НА ТО КОЛ-ВО КОЛЕЦ, КОТОРОЕ ВЫ ХОТИТЕ Для этого, НУЖНО это число #$A перевести из шестнадцатеричной системы счисления в десятичную. Допустим вы хотите, чтобы монитор с десятью кольцами давал не 10, а 50 колец, для этого число 50 нужно перевести в шестнадцатеричную сисиему счисления,сделать это можно с помощью калькулятора (переводим, получилось 32), теперь вместо #$A нужно ввести #$32 (теперь монитор должен давать 50 колец). Калькулятор, который переводит числа из одной системы счисления в другую: https://numsys.ru/ 2.МОНИТОР С НЕУЯЗВИМОСТЬЮ (НЕУЯЗВИМОСТЬ ДЛИТСЯ В 2 РАЗА ДОЛЬШЕ) Перейдите к Obj2E_ChkInvinc Obj2E_ChkInvinc: cmpi.b #5,d0 ; does monitor contain invincibility? bne.s Obj2E_ChkRings ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.w #$4B0,($FFFFD032).w ; time limit for the power-up move.b #$38,($FFFFD200).w ; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w ; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w ; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w ; load stars object ($3804) move.b #4,($FFFFD2DC).w tst.b ($FFFFF7AA).w ; is boss mode on? bne.s Obj2E_NoMusic ; if yes, branch move.w #$98,d0 jmp (PlaySound).l ; play invincibility music В СТРОКЕ move.w #$4B0,($FFFFD032).w ; time limit for the power-up нужно изменить значение #$4B0, воспользовавшись калькулятором, умножаем это число на 2 получилось 960, теперь изменяем #$4B0 на #$960, неуязвимость будет длится по времени в 2 раза дольше, если хотите чтобы неуязвимость длилась в 3 раза дольше, умножте число 960 (в шестнадцатеричной системе счисления hex) на 2 и т.д. ВЕЧНАЯ НЕУЯЗВИМОСТЬ ПЕРЕЙДИТЕ К СТРОКЕ move.w #$4B0,($FFFFD032).w ; time limit for the power-up И УДАЛИТЕ ЕЕ Чтобы наоборот уменьшить время неуязвимости (допустим в 2 раза), нужно разделить число 4B0 (hex) на 2 и т.д. 3.МОНИТОР С САПОГАМИ (БЫСТРЫЙ БЕГ ДЛИТСЯ В 2 РАЗА БЫСТРЕЕ) Перейдите к Obj2E_ChkShoes Obj2E_ChkShoes: cmpi.b #3,d0 ; does monitor contain speed shoes? bne.s Obj2E_ChkShield ; if not, branch move.b #1,($FFFFFE2E).w ; set speed shoes flag move.w #$4B0,($FFFFD034).w ; time limit for the power-up move.w #$C00,($FFFFF760).w ; change Sonic's top speed move.w #$18,($FFFFF762).w move.w #$80,($FFFFF764).w move.w #$E2,d0 jmp (PlaySound).l ; Speed up the music ПЕРЕХОДИМ К СТРОКЕ move.w #$4B0,($FFFFD034).w ; time limit for the power-up Точно также, как и в предыдущем случае, умножаем шестнадцатеричное число 4B0 на 2 получаем 960, значение #$4B0 изменяем на #$960 и т.д. Для того, чтобы быстрый бег был неограничен удаляем эту строку ИЗМЕНЕНИЕ СКОРОСТИ СОНИКА ВО ВРЕМЯ БЫСТРОГО БЕГА ПЕРЕХОДИМ К СТРОКЕ move.w #$C00,($FFFFF760).w ; change Sonic's top speed Чтобы увеличить скорость Соника в 2 раза, умножаем C00 на 2, получаем 1800, в 3 раза увеличиваем, нужно уже 1800 (hex) умножить на 2, получим 3000 (hex) и т.д. Чтобы уменьшить скорость Сонику в 2 раза, делим C00 на 2 и т.д. 4.МОНИТОР С ЖИЗНЬЮ (ИЗМЕНЕНИЕ КОЛ-ВА ЖИЗНЕЙ, КОТОРЫЕ ДАЕТ МОНИТОР) Перейдите к Obj2E_ChkSonic Obj2E_ChkSonic: cmpi.b #2,d0 ; does monitor contain Sonic? bne.s Obj2E_ChkShoes ; if not, branch ExtraLife: addq.b #1,($FFFFFE12).w ; add 1 to the number of lives you have addq.b #1,($FFFFFE1C).w ; add 1 to the lives counter move.w #$9F,d0 jmp (PlaySound).l ; play extra life music По умолчанию монитор с жизнью дает 1 жизнь, но это число можно изменить, для этого перейдите к строке addq.b #1,($FFFFFE12).w ; add 1 to the number of lives you have Тут не нужно переводить число, просто нужно изменить #1 на то кол-во жизней, которое вы хотите в десятичной системе счисления. МОНИТОР "S" Вообще неизвестно для чего предназначался этот монитор, вероятнее всего он должен был давать Сонику возможность превращаться в Супер Соника, но так как этой функции в оригинальной игре Sonic the hedgehog нет, давайте попробуют написать для этого монитора свой скрипт, допустим, сделаем так, чтобы этот монитор делал Соника вечно неуязвимым и быстрым, для этого воспользуемся уже существующими скриптами мониторов "бег и неуязвимость" Копируем скрипт, начиная со строки move.b #1,($FFFFFE2D).w ; make Sonic invincible, и заканчивая bne.s Obj2E_NoMusic ; if yes, branch Obj2E_ChkInvinc: cmpi.b #5,d0 ; does monitor contain invincibility? bne.s Obj2E_ChkRings ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.w #$4B0,($FFFFD032).w ; time limit for the power-up move.b #$38,($FFFFD200).w ; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w ; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w ; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w ; load stars object ($3804) move.b #4,($FFFFD2DC).w tst.b ($FFFFF7AA).w ; is boss mode on? bne.s Obj2E_NoMusic ; if yes, branch move.w #$98,d0 jmp (PlaySound).l ; play invincibility music ВОТ ЧТО ДОЛЖНО ПОЛУЧИТЬСЯ: Obj2E_ChkS: cmpi.b #7,d0 ; does monitor contain 'S'? bne.s Obj2E_ChkEnd ; if not, branch cmpi.b #5,d0 ; does monitor contain invincibility? bne.s Obj2E_ChkRings ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.w #$4B0,($FFFFD032).w ; time limit for the power-up move.b #$38,($FFFFD200).w ; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w ; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w ; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w ; load stars object ($3804) move.b #4,($FFFFD2DC).w tst.b ($FFFFF7AA).w ; is boss mode on? bne.s Obj2E_NoMusic ; if yes, branch move.w #$98,d0 jmp (PlaySound).l ; play invincibility music nop УДАЛЯЕМ СТРОКУ move.w #$4B0,($FFFFD032).w ; time limit for the power-up Теперь переходим к Obj2E_ChkShoes Obj2E_ChkShoes: cmpi.b #3,d0 ; does monitor contain speed shoes? bne.s Obj2E_ChkShield ; if not, branch move.b #1,($FFFFFE2E).w ; set speed shoes flag move.w #$4B0,($FFFFD034).w ; time limit for the power-up move.w #$C00,($FFFFF760).w ; change Sonic's top speed move.w #$18,($FFFFF762).w move.w #$80,($FFFFF764).w move.w #$E2,d0 jmp (PlaySound).l ; Speed up the music КОПИРУЕМ СКРИПТ, НАЧИНАЯ СО СТРОКИ move.b #1,($FFFFFE2E).w ; set speed shoes flag И ЗАКАНЧИВАЯ move.w #$80,($FFFFF764).w ТАКЖЕ УДАЛЯЕМ СТРОКУ move.w #$4B0,($FFFFD034).w ; time limit for the power-up ВОТ ЧТО В ИТОГЕ ДОЛЖНО ПОЛУЧИТЬСЯ Obj2E_ChkS: cmpi.b #7,d0 ; does monitor contain 'S'? bne.s Obj2E_ChkEnd ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.b #$38,($FFFFD200).w ; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w ; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w ; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w ; load stars object ($3804) move.b #4,($FFFFD2DC).w move.b #1,($FFFFFE2E).w ; set speed shoes flag move.w #$C00,($FFFFF760).w ; change Sonic's top speed nop Единственное, что осталось добавить (хотя это необязательно) звуковой эффект монитору или музыку, для этого добавляем этот скрипт (который можно скопировать из скриптов для других мониторов), и вот что получилось: Obj2E_ChkS: cmpi.b #7,d0 ; does monitor contain 'S'? bne.s Obj2E_ChkEnd ; if not, branch move.b #1,($FFFFFE2D).w ; make Sonic invincible move.b #$38,($FFFFD200).w ; load stars object ($3801) move.b #1,($FFFFD21C).w move.b #$38,($FFFFD240).w ; load stars object ($3802) move.b #2,($FFFFD25C).w move.b #$38,($FFFFD280).w ; load stars object ($3803) move.b #3,($FFFFD29C).w move.b #$38,($FFFFD2C0).w ; load stars object ($3804) move.b #4,($FFFFD2DC).w move.b #1,($FFFFFE2E).w ; set speed shoes flag move.w #$C00,($FFFFF760).w ; change Sonic's top speed move.w #$E2,d0 jmp (PlaySound).l ; nop Теперь, вместо #$E2, мы вводим код музыки, которая нам нужна, посмотреть какой код у какой музыки или звука, можно через Sound test в самой игре Категория:Программы для хакинга Sonic the hedgehog